# 引入django框架中 http模块中 HttpResponse 函数
from django.http import HttpResponse
from django.shortcuts import render,redirect        # redirect 重定向 路由
from django.core.paginator import Paginator         # 处理分页
import math

# 引入数据模型类
from mydjango.models import Users,Goods,Cars
#在设置处理函数
def hw(request):
    return HttpResponse('<h1 align="center" style="color:red">你好!</h1>')

def index(request):
    # name = request.GET.get('name')
    # name 获取值  和session关联  uid 是否存在
    if request.session.get('uid',None):
        # 如果有值 判断为true   登陆过            列表中一个值，三个字段[uid,username,usrpsd]
        name = Users.objects.filter(uid=request.session['uid'])[0].username
    else:
        # 无值  false  没登录过
        name = None

    stuname = "VV"
    score = 99
    """
        goods =  [           # 封装为一个对象
        {'id': 1, 'name': '葡萄', 'imgsrc': '../static/img/葡萄.jpg', 'price': 7.8, 'count': 98},
        {'id': 2, 'name': '西瓜', 'imgsrc': '../static/img/西瓜.jpg', 'price': 3.5, 'count': 76},
        {'id': 3, 'name': '橘子', 'imgsrc': '../static/img/橘子.jpg', 'price': 2.3, 'count': 102},
        {'id': 4, 'name': '柚子', 'imgsrc': '../static/img/柚子.jpg', 'price': 4.5, 'count': 56},
    ]
    """
    # 接受前端传参 keywords
    keywords = request.GET.get('keywords')

    if keywords:
        goods = Goods.objects.filter(name__contains=keywords)
    else:
        goods = Goods.objects.all()

    # 给前端传递的页码列表 pagelist [1,2,3,....]          math.ceil：向上取整
    # range(start,end)  自动生成从 start(包含) 开始，end(不包含) 结束的列表
    pagelist = range(1, math.ceil(len(goods) / 5) + 1)

    # 接受 前端传递的 页码 参数
    page = request.GET.get('page')
    if page:
        # 有值 字符串  转化为整形
        page = int(page)
    else:
        # 无值  默认展示第1页
        page = 1
    # 截取数据中的 前5个  列表切片
    goods = goods[5*(page-1):5*page]
    return render(request, "index.html",{"name": name, "stuname": stuname, "score": score, "goods": goods,"pagelist":pagelist})

def login(requset):
    if requset.POST:
        username = requset.POST.get('username')
        userpsd = requset.POST.get('userpsd')
        result = Users.objects.filter(username=username)
        # [{ username:admin,userpwd:123456}]
        if result:
            # 判断一下 当前有值的账号对应的密码 和前端发送的密码是否匹配
            if result[0].userpsd == userpsd:
                # 设置session会话存储  uid
                requset.session['uid'] = result[0].uid
                # return redirect('/index/?name='+result[0].username)  # 重定向，定位路由
                return redirect('/index/')  # 重定向，定位路由
            else:
                # 账号存在，密码错误
                return render(requset,'login.html')
        else:
            # 账号不存在，进行注册
            return render(requset,'register.html')
    return  render(requset,'login.html')


def register(requset):
    if requset.POST:        # post注册账号   get登录
        username = requset.POST.get('username')
        userpsd = requset.POST.get('userpsd')

        result = Users.objects.filter(username=username)
        if result:
            return render(requset,'resgiter.html')
        else:
            Users.objects.create(uid=None, username=username, userpsd=userpsd)  # uid = None  实现uid自增
            # 插入数据库中
            """
            # 将用户类 实例化 对象
            user1 = Users(uid=1,username=username,userpsd=userpsd)
            # 数据保存
            user1.save()
            """
            return render(requset,'login.html')
    return render(requset,'register.html')

def nav(request):
    one = [
        {
            "院系设置":[
             {"理工农学院":['计算机科学与技术','软件工程','园林艺术','土木建筑'],
              "医学院":['护理','药学','药剂学'],
              "文艺法学院":['文学','艺术','历史'],
              "经管学院":['经济管理']
              }
            ]
         },
        {"师资团队": ["师资1", "师资2", "师资3" ]},
        {"科学研究": ["科学1", "科学2"]},
        {"招生就业": ["招生就业"]},
    ]
    return  render(request,"nav.html",{"one":one})


def goodinfo(request):
    # 接受前端传递  商品id参数
    gid = request.GET.get('gid')
    # 接受 详情页加入购物车传递  商品id  POST请求
    if request.POST:
        if request.session.get('uid', None):        # 点击购物车，若登录，直接加入购物车  如果没登录，跳转到登录页面
            gid = request.POST.get('gid')
            uid = request.session['uid']
            # 间接数据库操作       通过封装好的数据模型
            # car = Cars(gid=gid, buy_count=1, uid=uid)
            # 先查询数据库 goods 表中gid对应商品信息数据 在插入购物车表中
            good = Goods.objects.filter(gid=gid)[0]
            car = Cars(good=good,buy_count=1,uid=uid)
            car.save()
        else:
            return redirect('/login/')
    # 根据参数执行数据库查询  条件查询 filter
    goods = Goods.objects.filter(gid=gid)

    # # # 接受 详情页 加入购物车传递  商品id     a标签 超链接
    # # car_gid gid : 访问页面 和 加入购物车和 写在一个路由中 为了区别
    # car_gid = request.GET.get('car_gid')
    # if car_gid:
    #     # 根据参数执行数据库查询  插入数据
    #     Cars.objects.create(cid=None, gid=car_gid, buy_count=1)
    #     goods = Goods.objects.filter(gid=car_gid)

    return render(request,'goodinfo.html',{"goods":goods})

def goshopping(request):
    # 先判断 是否登录 用request.session中是否存在 键uid的值
    if request.session.get('uid',None):      # true 有值        request.session['uid'] 报错  没登录时uid为空
        # 获取 session 中的 uid
        uid = request.session['uid']
        # 数据库操作 查询操作  购物车表
        cars =  Cars.objects.filter(uid=uid)

        # 删除操作
        if request.GET.get('gid'):
            gid = request.GET.get('gid')
            good = Cars.objects.filter(gid=gid)
            good[0].delete()

        # 数据库查询结果  cars   [{cid,gid,buy_count,uid}...]
        goods = []  # 设定 响应前端页面的所有购物车的商品数据
        for item in cars:       # item {cid,gid,buy_count,uid}
            good = Goods.objects.filter(gid = item.gid)[0]        # 只有一个数据  列表
            # good {gid,name,price,count,imgsrc,buy_count}
            good.buy_count = item.buy_count
            good.totalprice = good.price * good.buy_count
            goods.append(good)
        return  render(request,'goshopping.html',{"goods":goods})
    else:   # 无值  False
        return redirect('/login/')

def loginout(request):
    # 业务处理 --> 数据处理
    #  都可退出登录   删除session对象中的键值对       实质上是对数据库 session表 修改session_data字段值
    # request.session.pop('uid')
    # del request.session['uid']
    # request.session.clear()
    # 删除数据库session表中对应的记录/数据
    request.session.delete(request.session.session_key)
    return redirect('/index/')